You are viewing [info]phant0m_c0d3r's journal

Previous 10

Apr. 26th, 2011

default

Юзабилити

К вопросу о сабже: засекаем время и бежим на http://www.nespresso.com/

Задачи:
- выяснить чем отличается Pixie от CitiZ
- Можно ли варить в Pixie капучино?
- Сколько каждая из них стоит?

Я смог выяснить только на 7й минуте где среди всего этого "я - самый крутой кофеварко!", что мне нужно.

...
default

Миграция между платежными гейтвеями: кредитные карты

А вы знаете как переносят кредитные карты между платежными гейтвеями? Щя расскажу...

Представим что есть компания "А", полностью авторизированная для работы с кредитными картами и дочерняя компания "Б", которая не имеет такой авторизации. Компания "А" делигирует компании "Б" свой PCI Compliance (http://en.wikipedia.org/wiki/Payment_Card_Industry_Data_Security_Standard) в виде защищенного ноутбука и специального полезного человека-инспектора, который будет контролировать процесс миграции.

IT накатывает на свежий ноутбук образ Windows XP, устанавливает шифрование жесткого диска, Norton 360, PGP утилиты и шифрованные файлы с кредитками (!). Ноут отдается специалисту который будет делать миграцию. Спец ставит свой софт, в данном случае это MySQL сервер, HeidiSQL, Notepad++ и заливает исходник базы, в которой лежат данные для миграции. Этот процесс происходит без контроля (!): IT знает какой софт будет устанавливаться, софт бесплатный и не противоречит software policy компании - остальное не имеет значения.

Далее ноутбук прячется в темную и холодную комнату под замок, за KVM терминал, и начинается самое интересное: кредитки дешифруются, распаковываются и заливаются в MySQL (в открытом виде!). Файлы с кредитками секьюрно и многократно удаляются. Из номеров кредиток выдирается bin (issuer identifier) и tail (4 последнии цифры). Bin используется для отслеживания банков, с которыми могут быть "проблемные транзакции": fraud или возвраты (chargebacks). Последний этап - объединение номеров кредитных карт и миграционных данных.

Помним, что диски шифрованные, а таблицы огромные, поэтому операции с MySQL занимают много времени и Norton 360 постоянно порывается "отбить руки" MySQL за "High disk activity". Поэтому его отключают. Ибо нефиг!

Все действия происходят под контролем инспектора. У этого серьезного усатого дядьки есть список чего можно делать и при каких действиях "бросаться грудью на амбразуру и отбирать ноутбук". Он неусыпно бдит!.. на кухне кофе с девочками :)

Настает время делать дамп данных в файло и грузить его в конскольку гейтвея. Ноут для этого изымается из комнатки и включается в public network (с выключенным фаерволом и открытым MySQL без пароля суперпользователя!). MySQL на этом этапе пользовать нельзя, но ...

Сразу оговорюсь, что гейтвей - загадочный, как все женщины мира! Можно устраивать тотализатор какая из пицоттыщь ошибок может вылезти наружу. Например, с 99% вероятностью он может свалить 1 профиль из 400 тысяч подобных не признав US как страну :) А то, что он не верит в существование штатов с 3-х буквенным индексом (nsw, qld, act, tas)?! А вот еще: файлы должны быть в кодировке UTF-8, но "Василий Чернов" неправильная имя-фамилия! Потому что база гейтвея в latin1 и "??????? ??????" не содержит букв и цифр (!) латинского алфавита! Та же хохма с азиатскими фамилиями. Они редко бываеют больше 2х иероглифов, но их валидатор четко требует не менее 3х символов. Но как говорит начальство, "Если ЭТО использует Skype ..."

... поэтому заранее нельзя сказать чем закончится загрузка данных и делается их две: первая и коррекционная (только то, что непрошло сначала). Правки делаются на ходу: в Excel первоначальный анализ и в MySQL окончательная правка. Инспектор не против, он "курит" 7ю чашку кофе и ни разу не сбегал в туалет. Девочки в восторге :)

В финале, файлы выгружены, дампы с bin и tail слиты на флешку (!), ноут опечатан, жесткий диск изымается и уничтожается под подпись. На выходе инспектор шутит: "Надеюсь у Вас не фотографическая память?". "Фотографическая", говорю, "Вы будете уничтожать мой моск?".

...

Apr. 19th, 2011

default

Зима-холода

Не помню писал или нет: скопилось gift card на тыщу баксов и все - в дорогущий магазин. На выходных ходили шопится на зиму: ортоперди... ортопедри... ну вобщем подушку и электроодеяло. Подушка до сих пор ассоциируется с бруском мыла, а одеяло ништяк. Знатно греет косточки :)

...

Apr. 15th, 2011

default

Ох уж...

Исследую скрипты флеш-ролика, ищу защиту от прямой скачки видео-файла. Скрипт написан кем-то, но допилен русскими аутсорсерами, это видно по названиям переменных Reklama_Start, Reklama_End, Scena (вместо Stage) и HolyVars. Несколько сотен килобайт кода лежит под комментарием:

// оставим как есть, а то вдруг все пиздой накроется

Защита стыдливо прячется в самом конце кода: в 40 строк сделана генерация md5 сигнатуры из строки из 4 констант (домен, размер встроенного флеш-ролика, 2 юника) и трех переменных (время, юник из запроса и имя ролика), при чем все переменные открытым текстом идут к серверу.

Второей компонент защиты, как ни странно, наследование классов AbstractStream -> Stream -> BasicStream -> HTTPStream -> MediaHTTPStream -> FLVStream -> XXXStream. Что удивительно - защита работает. Чему равна param["config2"] метода класса "RolikInit", который по многу раз переопределяется и вызывается как super() без дебаггера и нормального IDE, на глаз хрен определишь! :)

...

Apr. 14th, 2011

default

Барби-трупаки

http://monsterhighdolls.net/ - oh, come on!! You're kidding me!

...
default

YouTube

Месяц назад начал лениво делать сайт для вытаскивания прямых ссылок видео из tube сайтов. Первым кандидатом был YouTube. Як когда делал research аналогичных проектов, удивился увидев что большинство рипалок ютуба написано на джаве. Причина кроется в защите ютуба:

hххp://v9.lscache6.c.youtube.com/videoplayback?sparams=id,expire,ip,ipbits,itag,algorithm,burst,factor,oc:U0hPR1dRVl9FSkNOOV9PS1pB&fexp=905500,904816,910207&algorithm=throttle-factor&itag=18&ipbits=0&burst=40&sver=3&signature=976728523F75678A92CA6028169F0BB39D40EEB0.85C73A29BEB6BA2165EC919496B88DBDB75AF8F3&expire=1302768000&key=yt1&ip=0.0.0.0&factor=1.25&id=265e28fa693917d7

Параметры выделенные черным участвуют в генерации сигнатуры (выделена курсивом). Единственная переменная зависящая от посетителя - ip. Ютуб использует первый октет IP. Следовательно если IP веб-сервера не в сети посетителя, то IP отличаются, сигнатуры следовательно тоже и ютуб блокирует файл.

Джава апплет запущенный под браузером посетителя делает запрос с "его" IP и ссылка будет работать.

В голову сразу приходит два варианта: (1) выкачивать файл на сервер и раздавать его оттудова (трафик, трафик и еще раз - трафик!) и (2) использовать прокси, чем я и занялся.

Родилась такая системка: консольный скрипт каждый час обновляет список прокси с прокси листов, он же проверяет каждый прокси на уникальность, живучесть, скорость отклика и скорость выкачки, анонимность и атомарность данных (дергает тестовый файл сам с себя). Второй скрипт, компонент веб-клиента, выбирает серию проверенных прокси для IP пользователя, перепроверяет их и конфигурирует веб-клиент. Благо ютуб использует только первый октет, поэтому достаточно иметь в базе 5-10 проксей на каждый диапазон из [1-255].ххх.ххх.ххх

Что получается в результате: пользователь пришел, например, с 149.xxx.xxx.xxx. Скрипт сконфигурировал прокси с IP 149.xxx.xxx.xxx, веб клиент через прокси сделал запрос и ютуб ... вежливо отдал ему ссылку которая _будет_ работать для посетителя. И никаких джава-апплетов с их секьюрити ворнингами!

На деле оказалось что прокси с бесплатных листов ...
- безбожно шейпят трафик
- мало живут
- имеют нестабильное время коннекта и выкачки
- часто уходят оффлайн
- и самое главное ... секьюрити сканеры! ЗАИПАЛИ!! Каждый второй после первого обращения начинает щупать сервер на предмет "ой, у вас Апач!! давайте посмотрим работают ли у вас уязвимости ... таки не, у вас наверное IIS под виндой! у вас должны быть такие дыры ... хм... не винда, может линукс?! а как насчет переполнения буфера при авторизации в ssh..." И гоняют на сервере всевозможные CVE (http://cve.mitre.org/)

Так что джава не самый худший из вариантов...

...
Tags:

Feb. 28th, 2011

chiffa

@Девелоперское 2

Написал пропозал и разослал. Идею заценили, реализацию - нет. DBA занудствовал что mongoDB не промышленный стандарт и он вторую "незнакомую" базу поддерживать не будет. IT требовало время потестировать все компоненты и вобще ... сделать им тест на стабильность, секьюрность и желательно с привлечением 3rd party. Девелопер, который делает client-server приложения, заявил что он не senior и Nginx, PHP-FPM, mongoDB выходят за рамки его компетенции, а если я senior то я и должен делать :)

Теперь они в качестве рабочей версии обкатывают стандартный вариант Apache, PHP5, MySQL. Который _мне_ звучит как "дополнительное время на реализацию проекта и экстра бюджет на два сервера", а _им_ - респект руководства за инициативность и хорошую задумку.

...

Feb. 27th, 2011

job

А вы писали свой браузер?

Задумал под пару проектов написать "браузер". Логически, он должен состоять из частей:
- HTTP Client - поддержка HTTP/HTTPS HEAD, GET, POST, PUT, DELETE; basic authentication; перенаправлений; gzip encoded & chunked контент; keep alive connections etc
- URL - манипуляции с сылками
- Cookie и Cookie Jar - прием и отправка "печенек"; сессионные и персистентные cookie
- виртуальный кэш - страницы в оригинальном виде хранить вряд ли понадобиться, но даты модификации и тэги - скорее всего. Поэтому conditional request (if-modified-since/if-none-match) должен тоже уметь делать и умно обрабатывать.

... и уметь делать разные вкусности: возвращать документ в виде DOM или plain html, собирать ссылки на внешные ресурсы и т.д.

Сначала решил написать сам и полез смотреть как это делали Mozilla и Chromium. Умно делали... Хотя исходники Chromium жуткий бардак! Потом пошел посмотреть что уже написано на PHP.

Наиболее близко стоит Zend_Http_Client в связке с cURL. Но с ним есть пара вопросов... Чего делать с куками, чтобы они были персистентно? Куки кстати в нем странно валидируются. Теоретически в этот клас можно назначить куки для top level domain: .com, .ua и т.д. А это нехорошо, хотя и не критично.

В результате дописал под него кэш, сделал оберточку и погонял на паре десятков сайтов. Обнаружил что девелоперы как-то не особо заморачиваются с обработкой conditional request-ов. Предпочитают расти "вширь" добавляя новые сервера в пул.


...
symc

Девелоперское

А любите ли вы логгировать? А я жуть как! :) При чем каждый раз пытаюсь логгировать по разному, хочу найти способ при котором лог меньше кушает памяти, не требует лишних вычислений, не грузит базу и выглядит красиво. Вот зачем в логах красивости? А полезно очень, сразу видно куда обращать внимание и читабельность повышается в разы, скажу я вам.

Хочу сделать вот так: nginx + PHP-FPM на фронтэнд; mongoDB на бэкэнд; запросы отсылаются в JSON по HTTP PUT, типа write-only REST. На сервере сидит злобный скрипт, который просыпается по крону и процессит накопленные логи.

JSON позволяет описать простой объект записи:

{
String logging_entity_name,
String logging_entity_id,
String category,
String subcategory,
Integer priority, // low, normal, medium, high, critical
Integer timestamp, // assigned after message received,
Mixed log // either string, array or object
}

log в джисоне прекрасно может иметь free-form структуру и вся запись жить в mongoDB, для которого JSON - как сын родной.

100% гарантия записи не требуется, но две ноды mongoDB повышают вероятность сохранения данных, если одна из них упадет.

Процедура логирования очень простой: клиент (на любом языке, JSON есть кругом, PUT через сокет сделать - детская задача) ведет лог и путит его на сервер. Ответ сервера клиента не интересует. Сервер проверяет целостность и валидность данных, ложит их в базу. Через некоторое время пост-процессор вынимает данные, анализирует и записывает в окончательное место.

В результате имеем единый солюшн куда могут стекаться логи со всех проектов (logging_entity_name.logging_entity_id - имя проекта), категоризироваться (category.subcategory) и раутиться куда нужно: sms и e-mail для экстренных сообщений, bug tracker для PHP Notice/Warning/Error/Exception, текстовые процессинговые логи с Textile разметкой - в MySQL и т.д.

Попробую толкнуть идею на работе. Спорим не согласятся? ;)

...

Oct. 22nd, 2010

chiffa

Требуется помощь... Отолью пивом!

Помните тот анекдот про мужика с бутлем мочи на анализ? Думаете прикол?! Фигу вам! Вот такую вот емкость выдали мне сегодня в поликлинике:



Боюсь не справлюсь :)

Зы. Умный Ubuntu втихаря повернул картинку и не признается...

...

Previous 10